The Eclipse platform (also referred to herein as “Eclipse”) is a computer program that provides a highly extensible computing environment. Eclipse is typically employed as an Integrated Development Environment (IDE). An IDE is a computer program product that helps computer programmers develop other computer programs. The use of an IDE generally enables programs to be developed more quickly, with fewer errors and at a lower cost. The Eclipse platform was designed to be as generic and extensible as possible to facilitate its use in developing programs in a wide variety of programming languages. This extensible nature, as well as specific functionality such as user interface functionality provided by Eclipse, has encouraged programmers to use Eclipse as the basis of applications never envisioned by the original developers.
Present versions of Eclipse execute within the Java Virtual Machine (JVM) runtime environment. Pre-defined functionality, called libraries, to perform a wide variety of tasks is often made available to the JVM. Historically, it has been necessary to design a separate version of a computer program product for each type of computer and operating system on which it is to be run. The JVM addresses this limitation by allowing programs written in Java to run on any computer or operating system with little to no modification. Therefore, Eclipse can run on most if not all computer systems which support the Java platform.
At its core, the Eclipse platform provides minimal functionality to its user. The platform provides various frameworks and significant user interface capabilities, but it generally does not provide specific implementations of anything. In fact, the Eclipse platform itself does not know how to process any specific computer language. Most functionality offered by Eclipse-based applications is provided via a technological device known as a “plug-in.” A plug-in is a unit of computer code which provides specific, well-defined functionality. A plug-in may also specify configuration settings. It is even possible for a plug-in to contain configuration settings but no program logic. The reasons for doing so are discussed below. Each plug-in typically has a unique identifier which distinguishes it from any other Eclipse plug-in.
The manner in which a plug-in relates to the remainder of an Eclipse-based application is defined in a special file called a manifest. The manifest specifies the unique identifier as discussed above. It also specifies the location of the actual computer code for the plug-in. The manifest is typically a text file in Extensible Markup Language (XML) format. XML is a technology which provides a basic structure applicable to various types of data. Within this basic structure, a technological device referred to as a “schema” may be used to define rules of syntax for more specific types of data. Unlike files produced by word processors and other common data entry applications, XML files often require a high degree of technical skill to edit due to the precise nature of the file format.
Plug-ins connect to each other in a hierarchical fashion. Indeed, an Eclipse-based application is structured as a hierarchical tree of plug-ins, all directly or indirectly linked to the Eclipse platform itself. To allow plug-ins to connect to each other, each plug-in may define one or more “extension-points.” An extension-point is a specification that one or more plug-ins, each referred to as an “extension”, may connect to the original plug-in. The extension-point also defines the interface, which is the exact manner in which the extensions connect to and communicate with the original plug-in. The purpose in connecting an extension to a plug-in is to allow the extension to contribute its own functionality and configuration settings to the original plug-in's functionality. Notably, the Eclipse platform does not require any given extension-point to have an extension connected to it.
The connections between extension-points and extensions are defined in the plug-in manifest files discussed above. However, once an extension has been connected to an extension-point by the plug-in manifests, the Eclipse platform does not define a method to remove that extension or replace it with a different extension.